package com.base.greedy;

/**
 * 55. 跳跃游戏
 *给定一个非负整数数组 nums ，你最初位于数组的 第一个下标 。
 *
 * 数组中的每个元素代表你在该位置可以跳跃的最大长度。
 *
 * 判断你是否能够到达最后一个下标。
 * eg:依次判断每个点，可以到达的右边最远距离；如果下个点的坐标大于了所谓的右边最远距离，那么就返回false；
 * @author leon
 * @date 2021年11月26日 12:55
 */
public class CanJump {
    public boolean canJump(int[] nums) {
        int n = nums.length-1;
        int start = 0;
        int step = nums[0];
        while(start+step<n){
            if(step==0){
                return false;
            }
            int max = 0;
            int index = start;
            for( int i = 1;i<=step;i++){
                if(i+nums[start+i]>max){
                    index = start+i;
                    max = i+nums[start+i];
                }

            }
            start = index;
            step = nums[start];
        }
        return true;
    }

    public boolean canJump1(int[] nums){
        int n = nums.length-1;
        int rightmost=0;
        for (int i = 0; i <= n; i++) {
            if (rightmost<i){
                return false;
            }
            rightmost = Math.max(rightmost, i + nums[i]);
        }
        return true;
    }

    public static void main(String[] args) {
        new CanJump().canJump1(new int[]{2,5,0,0});
    }
}
